<<<<<<< HEAD
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 +------------------------------------------------------------------------------
 * 图像操作类库
 +------------------------------------------------------------------------------
 * @category   NGN
 * @package    Core
 * @version   v1.0.0
 +------------------------------------------------------------------------------
 */

class image extends CI_Controller
{


    /**
     +----------------------------------------------------------
     * 取得图像信息
     *
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $image 图像文件名
     +----------------------------------------------------------
     * @return array OR bool
     +----------------------------------------------------------
     */
    static public function get_image_info($img) {
        $image_info = getimagesize($img);
        if( $image_info!== false) {
            $image_type = strtolower(substr(image_type_to_extension($image_info[2]),1));
            $image_size = filesize($img);
            $info = array(
                "width"=>$image_info[0],
                "height"=>$image_info[1],
                "type"=>$image_type,
                "size"=>$image_size,
                "mime"=>$image_info['mime']
            );
            return $info;
        }else {
            return false;
        }
    }

    /**
     +----------------------------------------------------------
     * 显示服务器图像文件
     * 支持URL方式
     +----------------------------------------------------------
     * @param string $img_file 图像文件名
     * @param string $text 文字字符串
     * @param string $width 图像宽度
     * @param string $height 图像高度
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
    static public function show_img($img_file,$text='',$width=80,$height=30) {
        //获取图像文件信息
        $info = image::get_image_info($img_file);
        if($info !== false) {
            $create_fun  =   str_replace('/','createfrom',$info['mime']);
            $im = $create_fun($img_file);
            if($im) {
                $image_fun= str_replace('/','',$info['mime']);
                if(!empty($text)) {
                    $tc  = imagecolorallocate($im, 0, 0, 0);
                    imagestring($im, 3, 5, 5, $text, $tc);
                }
                if($info['type']=='png' || $info['type']=='gif') {
                imagealphablending($im, false);//取消默认的混色模式
                imagesavealpha($im,true);//设定保存完整的 alpha 通道信息
                }
                header("Content-type: ".$info['mime']);
                $image_fun($im);
                imagedestroy($im);
                return ;
            }
        }
        //获取或者创建图像文件失败则生成空白PNG图片
        $im  = imagecreatetruecolor($width, $height);
        $bgc = imagecolorallocate($im, 255, 255, 255);
        $tc  = imagecolorallocate($im, 0, 0, 0);
        imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
        imagestring($im, 4, 5, 5, "NO PIC", $tc);
        image::output($im);
        return ;
    }

    /**
     +----------------------------------------------------------
     * 生成缩略图
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $image  原图
     * @param string $thumbname 缩略图文件名
     * @param string $type 图像格式
     * @param string $max_width  宽度
     * @param string $max_height  高度
     * @param boolean $interlace 启用隔行扫描
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
    static function thumb($image,$thumbname,$type='',$max_width=200,$max_height=50,$interlace=true)
    {
		@ini_set('memory_limit', '60M'); /* 脚本最大占用内存大小 */
		@ini_set('max_execution_time','60');  
        // 获取原图信息
        $info  = image::get_image_info($image);
         if($info !== false) {
            $src_width  = $info['width'];
            $max_height = $info['height'];
            $type = empty($type)?$info['type']:$type;
			$type = strtolower($type);
            $interlace  =  $interlace? 1:0;
            unset($info);
            $scale = min($max_width/$src_width, $max_height/$max_height); // 计算缩放比例
            if($scale>=1) {
                // 超过原图大小不再缩略
                $width   =  $src_width;
                $height  =  $max_height;
            }else{
                // 缩略图尺寸
                $width  = (int)($src_width*$scale);
                $height = (int)($max_height*$scale);
            }


            // 载入原图
            $create_fun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type);
            $src_img     = $create_fun($image);

            //创建缩略图
            if($type!='gif' && function_exists('imagecreatetruecolor'))
                $thumb_img = imagecreatetruecolor($width, $height);
            else
                $thumb_img = imagecreate($width, $height);

            // 复制图片
            if(function_exists("imagecopyresampled"))
                imagecopyresampled($thumb_img, $src_img, 0, 0, 0, 0, $width, $height, $src_width,$max_height);
            else
                imagecopyresized($thumb_img, $src_img, 0, 0, 0, 0, $width, $height,  $src_width,$max_height);
            if('gif'==$type || 'png'==$type) {
                //imagealphablending($thumb_img, false);//取消默认的混色模式
                //imagesavealpha($thumb_img,true);//设定保存完整的 alpha 通道信息
                $background_color  =  imagecolorallocate($thumb_img,  0,255,0);  //  指派一个绿色
				imagecolortransparent($thumb_img,$background_color);  //  设置为透明色，若注释掉该行则输出绿色的图
            }

            // 对jpeg图形设置隔行扫描
            if('jpg'==$type || 'jpeg'==$type) 	imageinterlace($thumb_img,$interlace);

            $gray=imagecolorallocate($thumb_img,255,0,0);
            //imagestring($thumb_img,2,5,5,"ngnchina",$gray);
            // 生成图片
            $image_fun = 'image'.($type=='jpg'?'jpeg':$type);
            $image_fun($thumb_img,$thumbname);
            imagedestroy($thumb_img);
            imagedestroy($src_img);
            return $thumbname;
         }
         return false;
    }

    /**
     +----------------------------------------------------------
     * 根据给定的字符串生成图像
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $string  字符串
     * @param string $size  图像大小 width,height 或者 array(width,height)
     * @param string $font  字体信息 fontface,fontsize 或者 array(fontface,fontsize)
     * @param string $type 图像格式 默认PNG
     * @param integer $disturb 是否干扰 1 点干扰 2 线干扰 3 复合干扰 0 无干扰
	 * @param bool $border  是否加边框 array(color)
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
	static public function build_string($string,$rgb=array(),$filename='',$type='png',$disturb=1,$border=true) {
		if(is_string($size))		$size	=	explode(',',$size);
		$width	=	$size[0];
		$height	=	$size[1];
		if(is_string($font))		$font	=	explode(',',$font);
		$fontface	=	$font[0];
		$fontsize	 	=	$font[1];
		$length		=	strlen($string);
        $width = ($length*9+10)>$width?$length*9+10:$width;
		$height	=	22;
        if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
            $im = @imagecreatetruecolor($width,$height);
        }else {
            $im = @imagecreate($width,$height);
        }
		if(empty($rgb)) {
			$color = imagecolorallocate($im, 102, 104, 104);
		}else{
			$color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);
		}
        $back_color = imagecolorallocate($im, 255,255,255);    //背景色（随机）
		$border_color = imagecolorallocate($im, 10, 10, 100);                    //边框色
        $point_color = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));                 //点颜色

        @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
        @imagestring($im, 5, 5, 3, $string, $color);
		if(!empty($disturb)) {
			// 添加干扰
			if($disturb=1 || $disturb=3) {
				for($i=0;$i<25;$i++){
					imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$point_color);
				}
			}elseif($disturb=2 || $disturb=3){
				for($i=0;$i<10;$i++){
					imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$point_color);
				}
			}
		}
        image::output($im,$type,$filename);
	}

    /**
     +----------------------------------------------------------
     * 生成图像验证码
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $verify_name  名称
     * @param string $length  位数
     * @param string $mode  类型
     * @param string $type 图像格式
     * @param string $width  宽度
     * @param string $height  高度
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
    static function build_image_verify($verify_name='verify',$length=4,$mode=1,$type='png',$width=48,$height=22)
    {
        $randval = image::rand_string($length,$mode);
  		$_SESSION['captcha'] = $randval;
        $width = ($length*10+10)>$width?$length*10+10:$width;
        if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
            $im = @imagecreatetruecolor($width,$height);
        }else {
            $im = @imagecreate($width,$height);
        }
        
        //创建一个图层
		$im = imagecreate($width, $height);
		 
		//背景色
		$back = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
		 
		//模糊点颜色
		$pix  = imagecolorallocate($im, 187, 230, 247);
		
		$font = imagecolorallocate($im, 41, 163, 238);
		
		//绘模糊作用的点
		mt_srand();
		for ($i = 0; $i < 1000; $i++) {
		    imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pix);
		}
		 
		//输出字符
		imagestring($im, 5, 7, 5, $randval, $font);
		 
		//输出矩形
		imagerectangle($im, 0, 0, $width -1, $height -1, $font);

		/***
        $r = array(225,255,255,223);
        $g = array(225,236,237,255);
        $b = array(225,236,166,125);
        $key = mt_rand(0,3);

        $back_color = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]);    //背景色（随机）
		$border_color = imagecolorallocate($im, 10, 100, 100);                    //边框色
        $point_color = imagecolorallocate($im,mt_rand(0,124),mt_rand(0,200),mt_rand(0,156));                 //点颜色

        @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
        $string_color = imagecolorallocate($im,mt_rand(0,200),mt_rand(0,120),mt_rand(0,120));
		// 干扰
		for($i=0;$i<10;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
		}
		for($i=0;$i<25;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$point_color);
		}
		for($i=0;$i<$length;$i++) {
			imagestring($im,5,$i*10+5,mt_rand(1,8),$randval{$i}, $string_color);
		}*/

        image::output($im,$type);
    }

	// 中文验证码
	static function gbk_verify($verify_name='verify',$length=4,$type='png',$width=180,$height=50,$fontface='\..\fonts\simhei.ttf') {
		$code	=	image::rand_string($length,4);
        $width = ($length*45)>$width?$length*45:$width;
        //session
		//$_SESSION[$verify_name]= md5($code);
		//$this->session->set_userdata('uid',$randval);
		set_cookie($verify_name,$randval,3600);
		$_SESSION['captcha']=$code;
		//$this->session->set_userdata($code); 
		$im=imagecreatetruecolor($width,$height);
		$border_color = imagecolorallocate($im, 100, 100, 100);                    //边框色
		$bkcolor=imagecolorallocate($im,250,250,250);
		imagefill($im,0,0,$bkcolor);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
		// 干扰
		for($i=0;$i<15;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
		}
		for($i=0;$i<255;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$fontcolor);
		}
		if(!is_file($fontface)) {
			$fontface = dirname(__FILE__).$fontface;
		}
		for($i=0;$i<$length;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120)); //这样保证随机出来的颜色较深。
			$codex= image::cutstr($code,$i,1);
			imagettftext($im,mt_rand(16,20),mt_rand(-60,60),40*$i+20,mt_rand(30,35),$fontcolor,$fontface,$codex);
		}
		image::output($im,$type);
	}

    /**
     +----------------------------------------------------------
     * 生成高级图像验证码
     +----------------------------------------------------------
     * @param string $type 图像格式
     * @param string $width  宽度
     * @param string $height  高度
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
    static function show_adv_verify($type='png',$width=180,$height=40,$verify_name='verify')
    {
		$rand	=	range('a','z');
		shuffle($rand);
		$verify_code	=	array_slice($rand,0,10);
        $zhs_letter = implode(" ",$verify_code);
        //设置session
		//$this->session->set_userdata($randval);  
		set_cookie($verify_name,$randval,3600);
		$_SESSION['captcha']=$randval;
        $im = imagecreate($width,$height);
        $r = array(225,255,255,223);
        $g = array(225,236,237,255);
        $b = array(225,236,166,125);
        $key = mt_rand(0,3);
        $back_color = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]);
		$border_color = imagecolorallocate($im, 100, 100, 100);                    //边框色
        imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
        imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
        $number_color = imagecolorallocate($im, 255,rand(0,100), rand(0,100));
        $string_color = imagecolorallocate($im, rand(0,100), rand(0,100), 255);
		// 添加干扰
		
		for($i=0;$i<10;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
		}
		for($i=0;$i<255;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$fontcolor);
		}
        imagestring($im, 5, 5, 1, "0 1 2 3 4 5 6 7 8 9", $number_color);
        imagestring($im, 5, 5, 20, $zhs_letter, $string_color);
        image::output($im,$type);
    }
    /**
     +----------------------------------------------------------
     * 生成邮箱等
     +----------------------------------------------------------
     * @param string $email 图像格式
     * @param string $filename  文件名
     * @param string $type  类型
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
	static public function build_email($email,$rgb=array(),$filename='',$type='png') {
		$mail		=	explode('@',$email);
		$user		=	trim($mail[0]);
		$mail		=	strtolower(trim($mail[1]));
		$path		=	dirname(__FILE__).'/../fonts/';
		if(is_file($path.$mail.'.png')) {
			$im	= imagecreatefrompng($path.$mail.'.png');
			$user_width = imagettfbbox(9, 0, dirname(__FILE__)."/../fonts/tahoma.ttf", $user);
			$x_value = (200 - ($user_width[2] + 113));
			if(empty($rgb)) {
				$color = imagecolorallocate($im, 102, 104, 104);
			}else{
				$color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);
			}
			imagettftext($im, 9, 0, $x_value, 16, $color, dirname(__FILE__)."/../fonts/tahoma.ttf", $user);
		}else{
			$user_width = imagettfbbox(9, 0, dirname(__FILE__)."/../fonts/tahoma.ttf", $email);
			$width	=	$user_width[2]+15;
			$height	=	20;
			$im	=	imagecreate($width,20);
			$back_color = imagecolorallocate($im, 255,255,255);    //背景色（随机）
			$borderColor = imagecolorallocate($im, 100, 100, 100);                    //边框色
			$point_color = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));                 //点颜色
			imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
			imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
			if(empty($rgb)) {
				$color = imagecolorallocate($im, 102, 104, 104);
			}else{
				$color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);
			}
			imagettftext($im, 9, 0, 5, 16, $color, dirname(__FILE__)."/../fonts/tahoma.ttf", $email);
			for($i=0;$i<25;$i++){
				imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$point_color);
			}
		}
		image::output($im,$type,$filename);
	}
    /**
     +----------------------------------------------------------
     * 开成图片
     +----------------------------------------------------------
     * @param string $type 图像格式
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
    static function output($im,$type='png',$filename='')
    {
        header("Content-type: image/".$type);
        $image_fun='image'.$type;
		if(empty($filename)) {
	        $image_fun($im);
		}else{
	        $image_fun($im,$filename);
		}
        imagedestroy($im);
    }
    
	/**
	 +----------------------------------------------------------
	 * 产生随机字串，可用来自动生成密码
	 * 默认长度6位 字母和数字混合 支持中文
	 +----------------------------------------------------------
	 * @param string $len 长度
	 * @param string $type 字串类型
	 * 0 字母 1 数字 其它 混合
	 * @param string $add_chars 额外字符
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function rand_string($len=6,$type='',$add_chars='') {
		$str ='';
		switch($type) {
			case 0:
				$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.$add_chars;
				break;
			case 1:
				$chars= str_repeat('0123456789',3);
				break;
			case 2:
				$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.$add_chars;
				break;
			case 3:
				$chars='abcdefghijklmnopqrstuvwxyz'.$add_chars;
				break;
			case 4:
				$chars = "们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这主中人上为来分生对于学下级地个用同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然如应形想制心样干都向变关问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩康遵牧遭幅园腔订香肉弟屋敏恢忘编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航衣孙龄岭骗休借".$add_chars;
				break;
			default :
				// 默认去掉了容易混淆的字符oOLl和数字01，要添加请使用add_chars参数
				$chars='ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.$add_chars;
				break;
		}
		if($len>10 ) {//位数过长重复字符串一定次数
			$chars= $type==1? str_repeat($chars,$len) : str_repeat($chars,5);
		}
		if($type!=4) {
			$chars   =   str_shuffle($chars);
			$str     =   substr($chars,0,$len);
		}else{
			// 中文随机字
			for($i=0;$i<$len;$i++){
			  $str.= self::cutstr($chars, floor(mt_rand(0,mb_strlen($chars,'utf-8')-1)),1);
			}
		}
		
		return $str;
	}
	
/**
	 +----------------------------------------------------------
	 * 字符串截取，支持中文和其他编码
	 +----------------------------------------------------------
	 * @static
	 * @access public
	 +----------------------------------------------------------
	 * @param string $str 需要转换的字符串
	 * @param string $start 开始位置
	 * @param string $length 截取长度
	 * @param string $charset 编码格式
	 * @param string $suffix 截断显示字符
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function cutstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
	{
		if(function_exists("mb_substr"))
			return mb_substr($str, $start, $length, $charset);
		elseif(function_exists('iconv_substr')) {
			return iconv_substr($str,$start,$length,$charset);
		}
		$re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
		$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
		$re['gbk']	  = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
		$re['big5']	  = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
		preg_match_all($re[$charset], $str, $match);
		$slice = join("",array_slice($match[0], $start, $length));
		if($suffix) return $slice."…";
		return $slice;
	}
	

}//类定义结束
=======
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 +------------------------------------------------------------------------------
 * 图像操作类库
 +------------------------------------------------------------------------------
 * @category   NGN
 * @package    Core
 * @version   v1.0.0
 +------------------------------------------------------------------------------
 */

class image extends CI_Controller
{


    /**
     +----------------------------------------------------------
     * 取得图像信息
     *
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $image 图像文件名
     +----------------------------------------------------------
     * @return array OR bool
     +----------------------------------------------------------
     */
    static public function get_image_info($img) {
        $image_info = getimagesize($img);
        if( $image_info!== false) {
            $image_type = strtolower(substr(image_type_to_extension($image_info[2]),1));
            $image_size = filesize($img);
            $info = array(
                "width"=>$image_info[0],
                "height"=>$image_info[1],
                "type"=>$image_type,
                "size"=>$image_size,
                "mime"=>$image_info['mime']
            );
            return $info;
        }else {
            return false;
        }
    }

    /**
     +----------------------------------------------------------
     * 显示服务器图像文件
     * 支持URL方式
     +----------------------------------------------------------
     * @param string $img_file 图像文件名
     * @param string $text 文字字符串
     * @param string $width 图像宽度
     * @param string $height 图像高度
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
    static public function show_img($img_file,$text='',$width=80,$height=30) {
        //获取图像文件信息
        $info = image::get_image_info($img_file);
        if($info !== false) {
            $create_fun  =   str_replace('/','createfrom',$info['mime']);
            $im = $create_fun($img_file);
            if($im) {
                $image_fun= str_replace('/','',$info['mime']);
                if(!empty($text)) {
                    $tc  = imagecolorallocate($im, 0, 0, 0);
                    imagestring($im, 3, 5, 5, $text, $tc);
                }
                if($info['type']=='png' || $info['type']=='gif') {
                imagealphablending($im, false);//取消默认的混色模式
                imagesavealpha($im,true);//设定保存完整的 alpha 通道信息
                }
                header("Content-type: ".$info['mime']);
                $image_fun($im);
                imagedestroy($im);
                return ;
            }
        }
        //获取或者创建图像文件失败则生成空白PNG图片
        $im  = imagecreatetruecolor($width, $height);
        $bgc = imagecolorallocate($im, 255, 255, 255);
        $tc  = imagecolorallocate($im, 0, 0, 0);
        imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
        imagestring($im, 4, 5, 5, "NO PIC", $tc);
        image::output($im);
        return ;
    }

    /**
     +----------------------------------------------------------
     * 生成缩略图
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $image  原图
     * @param string $thumbname 缩略图文件名
     * @param string $type 图像格式
     * @param string $max_width  宽度
     * @param string $max_height  高度
     * @param boolean $interlace 启用隔行扫描
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
    static function thumb($image,$thumbname,$type='',$max_width=200,$max_height=50,$interlace=true)
    {
    	@ini_set('memory_limit', '60M'); /* 脚本最大占用内存大小 */
		@ini_set('max_execution_time','60');  
        // 获取原图信息
        $info  = image::get_image_info($image);
         if($info !== false) {
            $src_width  = $info['width'];
            $max_height = $info['height'];
            $type = empty($type)?$info['type']:$type;
			$type = strtolower($type);
            $interlace  =  $interlace? 1:0;
            unset($info);
            $scale = min($max_width/$src_width, $max_height/$max_height); // 计算缩放比例
            if($scale>=1) {
                // 超过原图大小不再缩略
                $width   =  $src_width;
                $height  =  $max_height;
            }else{
                // 缩略图尺寸
                $width  = (int)($src_width*$scale);
                $height = (int)($max_height*$scale);
            }


            // 载入原图
            $create_fun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type);
            $src_img     = $create_fun($image);

            //创建缩略图
            if($type!='gif' && function_exists('imagecreatetruecolor'))
                $thumb_img = imagecreatetruecolor($width, $height);
            else
                $thumb_img = imagecreate($width, $height);

            // 复制图片
            if(function_exists("imagecopyresampled"))
                imagecopyresampled($thumb_img, $src_img, 0, 0, 0, 0, $width, $height, $src_width,$max_height);
            else
                imagecopyresized($thumb_img, $src_img, 0, 0, 0, 0, $width, $height,  $src_width,$max_height);
            if('gif'==$type || 'png'==$type) {
                //imagealphablending($thumb_img, false);//取消默认的混色模式
                //imagesavealpha($thumb_img,true);//设定保存完整的 alpha 通道信息
                $background_color  =  imagecolorallocate($thumb_img,  0,255,0);  //  指派一个绿色
				imagecolortransparent($thumb_img,$background_color);  //  设置为透明色，若注释掉该行则输出绿色的图
            }

            // 对jpeg图形设置隔行扫描
            if('jpg'==$type || 'jpeg'==$type) 	imageinterlace($thumb_img,$interlace);

            $gray=imagecolorallocate($thumb_img,255,0,0);
            //imagestring($thumb_img,2,5,5,"ngnchina",$gray);
            // 生成图片
            $image_fun = 'image'.($type=='jpg'?'jpeg':$type);
            $image_fun($thumb_img,$thumbname);
            imagedestroy($thumb_img);
            imagedestroy($src_img);
            return $thumbname;
         }
         return false;
    }

    /**
     +----------------------------------------------------------
     * 根据给定的字符串生成图像
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $string  字符串
     * @param string $size  图像大小 width,height 或者 array(width,height)
     * @param string $font  字体信息 fontface,fontsize 或者 array(fontface,fontsize)
     * @param string $type 图像格式 默认PNG
     * @param integer $disturb 是否干扰 1 点干扰 2 线干扰 3 复合干扰 0 无干扰
	 * @param bool $border  是否加边框 array(color)
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
	static public function build_string($string,$rgb=array(),$filename='',$type='png',$disturb=1,$border=true) {
		if(is_string($size))		$size	=	explode(',',$size);
		$width	=	$size[0];
		$height	=	$size[1];
		if(is_string($font))		$font	=	explode(',',$font);
		$fontface	=	$font[0];
		$fontsize	 	=	$font[1];
		$length		=	strlen($string);
        $width = ($length*9+10)>$width?$length*9+10:$width;
		$height	=	22;
        if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
            $im = @imagecreatetruecolor($width,$height);
        }else {
            $im = @imagecreate($width,$height);
        }
		if(empty($rgb)) {
			$color = imagecolorallocate($im, 102, 104, 104);
		}else{
			$color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);
		}
        $back_color = imagecolorallocate($im, 255,255,255);    //背景色（随机）
		$border_color = imagecolorallocate($im, 10, 10, 100);                    //边框色
        $point_color = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));                 //点颜色

        @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
        @imagestring($im, 5, 5, 3, $string, $color);
		if(!empty($disturb)) {
			// 添加干扰
			if($disturb=1 || $disturb=3) {
				for($i=0;$i<25;$i++){
					imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$point_color);
				}
			}elseif($disturb=2 || $disturb=3){
				for($i=0;$i<10;$i++){
					imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$point_color);
				}
			}
		}
        image::output($im,$type,$filename);
	}

    /**
     +----------------------------------------------------------
     * 生成图像验证码
     +----------------------------------------------------------
     * @static
     * @access public
     +----------------------------------------------------------
     * @param string $verify_name  名称
     * @param string $length  位数
     * @param string $mode  类型
     * @param string $type 图像格式
     * @param string $width  宽度
     * @param string $height  高度
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
    static function build_image_verify($verify_name='verify',$length=4,$mode=1,$type='png',$width=48,$height=22)
    {
        $randval = image::rand_string($length,$mode);
  		$_SESSION['captcha'] = $randval;
        $width = ($length*10+10)>$width?$length*10+10:$width;
        if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
            $im = @imagecreatetruecolor($width,$height);
        }else {
            $im = @imagecreate($width,$height);
        }
        
        //创建一个图层
		$im = imagecreate($width, $height);
		 
		//背景色
		$back = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
		 
		//模糊点颜色
		$pix  = imagecolorallocate($im, 187, 230, 247);
		
		$font = imagecolorallocate($im, 41, 163, 238);
		
		//绘模糊作用的点
		mt_srand();
		for ($i = 0; $i < 1000; $i++) {
		    imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pix);
		}
		 
		//输出字符
		imagestring($im, 5, 7, 5, $randval, $font);
		 
		//输出矩形
		imagerectangle($im, 0, 0, $width -1, $height -1, $font);

		/***
        $r = array(225,255,255,223);
        $g = array(225,236,237,255);
        $b = array(225,236,166,125);
        $key = mt_rand(0,3);

        $back_color = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]);    //背景色（随机）
		$border_color = imagecolorallocate($im, 10, 100, 100);                    //边框色
        $point_color = imagecolorallocate($im,mt_rand(0,124),mt_rand(0,200),mt_rand(0,156));                 //点颜色

        @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
        $string_color = imagecolorallocate($im,mt_rand(0,200),mt_rand(0,120),mt_rand(0,120));
		// 干扰
		for($i=0;$i<10;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
		}
		for($i=0;$i<25;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$point_color);
		}
		for($i=0;$i<$length;$i++) {
			imagestring($im,5,$i*10+5,mt_rand(1,8),$randval{$i}, $string_color);
		}*/

        image::output($im,$type);
    }

	// 中文验证码
	static function gbk_verify($verify_name='verify',$length=4,$type='png',$width=180,$height=50,$fontface='\..\fonts\simhei.ttf') {
		$code	=	image::rand_string($length,4);
        $width = ($length*45)>$width?$length*45:$width;
        //session
		//$_SESSION[$verify_name]= md5($code);
		//$this->session->set_userdata('uid',$randval);
		set_cookie($verify_name,$randval,3600);
		$_SESSION['captcha']=$code;
		//$this->session->set_userdata($code); 
		$im=imagecreatetruecolor($width,$height);
		$border_color = imagecolorallocate($im, 100, 100, 100);                    //边框色
		$bkcolor=imagecolorallocate($im,250,250,250);
		imagefill($im,0,0,$bkcolor);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
		// 干扰
		for($i=0;$i<15;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
		}
		for($i=0;$i<255;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$fontcolor);
		}
		if(!is_file($fontface)) {
			$fontface = dirname(__FILE__).$fontface;
		}
		for($i=0;$i<$length;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120)); //这样保证随机出来的颜色较深。
			$codex= image::cutstr($code,$i,1);
			imagettftext($im,mt_rand(16,20),mt_rand(-60,60),40*$i+20,mt_rand(30,35),$fontcolor,$fontface,$codex);
		}
		image::output($im,$type);
	}

    /**
     +----------------------------------------------------------
     * 生成高级图像验证码
     +----------------------------------------------------------
     * @param string $type 图像格式
     * @param string $width  宽度
     * @param string $height  高度
     +----------------------------------------------------------
     * @return string
     +----------------------------------------------------------
     */
    static function show_adv_verify($type='png',$width=180,$height=40,$verify_name='verify')
    {
		$rand	=	range('a','z');
		shuffle($rand);
		$verify_code	=	array_slice($rand,0,10);
        $zhs_letter = implode(" ",$verify_code);
        //设置session
		//$this->session->set_userdata($randval);  
		set_cookie($verify_name,$randval,3600);
		$_SESSION['captcha']=$randval;
        $im = imagecreate($width,$height);
        $r = array(225,255,255,223);
        $g = array(225,236,237,255);
        $b = array(225,236,166,125);
        $key = mt_rand(0,3);
        $back_color = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]);
		$border_color = imagecolorallocate($im, 100, 100, 100);                    //边框色
        imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
        imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
        $number_color = imagecolorallocate($im, 255,rand(0,100), rand(0,100));
        $string_color = imagecolorallocate($im, rand(0,100), rand(0,100), 255);
		// 添加干扰
		
		for($i=0;$i<10;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
		}
		for($i=0;$i<255;$i++){
			$fontcolor=imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
			imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$fontcolor);
		}
        imagestring($im, 5, 5, 1, "0 1 2 3 4 5 6 7 8 9", $number_color);
        imagestring($im, 5, 5, 20, $zhs_letter, $string_color);
        image::output($im,$type);
    }
    /**
     +----------------------------------------------------------
     * 生成邮箱等
     +----------------------------------------------------------
     * @param string $email 图像格式
     * @param string $filename  文件名
     * @param string $type  类型
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
	static public function build_email($email,$rgb=array(),$filename='',$type='png') {
		$mail		=	explode('@',$email);
		$user		=	trim($mail[0]);
		$mail		=	strtolower(trim($mail[1]));
		$path		=	dirname(__FILE__).'/../fonts/';
		if(is_file($path.$mail.'.png')) {
			$im	= imagecreatefrompng($path.$mail.'.png');
			$user_width = imagettfbbox(9, 0, dirname(__FILE__)."/../fonts/tahoma.ttf", $user);
			$x_value = (200 - ($user_width[2] + 113));
			if(empty($rgb)) {
				$color = imagecolorallocate($im, 102, 104, 104);
			}else{
				$color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);
			}
			imagettftext($im, 9, 0, $x_value, 16, $color, dirname(__FILE__)."/../fonts/tahoma.ttf", $user);
		}else{
			$user_width = imagettfbbox(9, 0, dirname(__FILE__)."/../fonts/tahoma.ttf", $email);
			$width	=	$user_width[2]+15;
			$height	=	20;
			$im	=	imagecreate($width,20);
			$back_color = imagecolorallocate($im, 255,255,255);    //背景色（随机）
			$borderColor = imagecolorallocate($im, 100, 100, 100);                    //边框色
			$point_color = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));                 //点颜色
			imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $back_color);
			imagerectangle($im, 0, 0, $width-1, $height-1, $border_color);
			if(empty($rgb)) {
				$color = imagecolorallocate($im, 102, 104, 104);
			}else{
				$color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]);
			}
			imagettftext($im, 9, 0, 5, 16, $color, dirname(__FILE__)."/../fonts/tahoma.ttf", $email);
			for($i=0;$i<25;$i++){
				imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$point_color);
			}
		}
		image::output($im,$type,$filename);
	}
    /**
     +----------------------------------------------------------
     * 开成图片
     +----------------------------------------------------------
     * @param string $type 图像格式
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */
    static function output($im,$type='png',$filename='')
    {
        header("Content-type: image/".$type);
        $image_fun='image'.$type;
		if(empty($filename)) {
	        $image_fun($im);
		}else{
	        $image_fun($im,$filename);
		}
        imagedestroy($im);
    }
    
	/**
	 +----------------------------------------------------------
	 * 产生随机字串，可用来自动生成密码
	 * 默认长度6位 字母和数字混合 支持中文
	 +----------------------------------------------------------
	 * @param string $len 长度
	 * @param string $type 字串类型
	 * 0 字母 1 数字 其它 混合
	 * @param string $add_chars 额外字符
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function rand_string($len=6,$type='',$add_chars='') {
		$str ='';
		switch($type) {
			case 0:
				$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.$add_chars;
				break;
			case 1:
				$chars= str_repeat('0123456789',3);
				break;
			case 2:
				$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.$add_chars;
				break;
			case 3:
				$chars='abcdefghijklmnopqrstuvwxyz'.$add_chars;
				break;
			case 4:
				$chars = "们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这主中人上为来分生对于学下级地个用同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然如应形想制心样干都向变关问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩康遵牧遭幅园腔订香肉弟屋敏恢忘编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航衣孙龄岭骗休借".$add_chars;
				break;
			default :
				// 默认去掉了容易混淆的字符oOLl和数字01，要添加请使用add_chars参数
				$chars='ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.$add_chars;
				break;
		}
		if($len>10 ) {//位数过长重复字符串一定次数
			$chars= $type==1? str_repeat($chars,$len) : str_repeat($chars,5);
		}
		if($type!=4) {
			$chars   =   str_shuffle($chars);
			$str     =   substr($chars,0,$len);
		}else{
			// 中文随机字
			for($i=0;$i<$len;$i++){
			  $str.= self::cutstr($chars, floor(mt_rand(0,mb_strlen($chars,'utf-8')-1)),1);
			}
		}
		
		return $str;
	}
	
/**
	 +----------------------------------------------------------
	 * 字符串截取，支持中文和其他编码
	 +----------------------------------------------------------
	 * @static
	 * @access public
	 +----------------------------------------------------------
	 * @param string $str 需要转换的字符串
	 * @param string $start 开始位置
	 * @param string $length 截取长度
	 * @param string $charset 编码格式
	 * @param string $suffix 截断显示字符
	 +----------------------------------------------------------
	 * @return string
	 +----------------------------------------------------------
	 */
	static public function cutstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
	{
		if(function_exists("mb_substr"))
			return mb_substr($str, $start, $length, $charset);
		elseif(function_exists('iconv_substr')) {
			return iconv_substr($str,$start,$length,$charset);
		}
		$re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
		$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
		$re['gbk']	  = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
		$re['big5']	  = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
		preg_match_all($re[$charset], $str, $match);
		$slice = join("",array_slice($match[0], $start, $length));
		if($suffix) return $slice."…";
		return $slice;
	}
	

}//类定义结束
>>>>>>> d47623b610d79a4eeb489500830c00d70933f414
?>